Мультипредметная личная олимпиада ЮФУ

среди школьников 2016

F. Как поделить торт?

 

По случаю очередного знаменательного прорыва в области тортоведения, к Петру Петровичу в гости пришли k экспертов-сладкоежек. Для дорогих гостей Петр Петрович заказал большой круглый торт, однако, когда деловые разговоры об оптимальном украшении карамельными розочками подошли к концу и пришло время подавать торт, Петр Петрович с ужасом обнаружил, что ему доставили торт в форме правильного n-угольника со стороной a и высоты h.

Вкусы экспертов-сладкоежек очень специфичны: они согласны есть кусочки торта либо в виде треугольников, либо в виде секторов круга. Если предложить им что-нибудь иное, может случиться все что угодно!

Петр Петрович решил разрезать торт на n треугольных кусочков и раздать их гостям, но тут же возникла проблема: каждый гость хочет получить как можно больше торта, при этом всем должно достаться поровну! А если не делится? Все лишнее Петр Петрович распорядится увезти как можно дальше (возможно, даже на другую планету), чтобы гости не передрались.

Единственное, что интересует Петра Петровича в этой непростой ситуации: а каков объем доли торта, которую придется выбросить? Это и будет вашей задачей.

 

Вход. Четыре натуральных числа, не превышающих 106: n, k, a, h – число углов в торте, число гостей, длина одной стороны торта и его высота соответственно. Известно, что n ≥ 3.

 

Выход.  Выведите одно вещественное число (с точностью до 4-х знаков после десятичной запятой) – объем доли торта, которую придется выбросить.

 

Пример входа 1

4 4 1 1

Пример входа 2

4 3 1 1

Пример выхода 1

0.0000

Пример выхода 2

0.2500

 

 

РЕШЕНИЕ

геометрия

 

Анализ алгоритма

Вычислим площадь правильного n-угольника со стороной а. Разобьем его на n треугольников.

Площадь треугольника KLO найдем как ½ * KL * PO. , следовательно

PO = PL /  = ,

SKLO = ½ * KL * PO = ½ * a *  =

Объем торта соответственно равен V = h * n * SKLO = .

Торт можно разрезать на n одинаковых секторов. Разделив их на k гостей поровну, получится что каждому гостю достанется в точности t = n / k секторов. Объем одного сектора составит each = V / n. Следовательно после раздачи оставшийся объем торта составит V – each * t * k.

 

Реализация алгоритма

 

#include <stdio.h>

#include <math.h>

#define PI acos(-1.0)

 

double n, k, a, h;

double area, vol, each, ans;

 

int main(void)

{

  scanf("%lf %lf %lf %lf",&n,&k,&a,&h);

  area = 1.0 * n * a * a / (tan (1.0 * PI / n) * 4.0);

  vol = area * h;

  each = vol / n;

  int t = n / k;

  ans = vol - t * each * k;

  printf("%lf\n",ans);

  return 0;

}